home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / cross / GBDK-2.0.lha / GBDK / examples / ram_fn.c < prev    next >
C/C++ Source or Header  |  1998-10-01  |  1KB  |  63 lines

  1. #include <gb.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. UWORD counter;
  6.  
  7. void inc()
  8. {
  9.   counter++;
  10. }
  11.  
  12. void print_counter()
  13. {
  14.   printf(" Counter is %lu\n", counter);
  15. }
  16.  
  17. void main()
  18. {
  19.   extern UBYTE end_inc, start_inc;
  20.   /* Declare extern functions */
  21.   void inc_ram();
  22.   void inc_hiram();
  23.   /* Declare pointer-to-function variables */
  24.   void (*inc_ram_var)() = (void (*)())0xD000;
  25.   void (*inc_hiram_var)() = (void (*)())0xFFA0;
  26.  
  27.   puts("Program Start...");
  28.   counter = 0;
  29.   /* Copy 'inc' to HIRAM at 0xFFA0 */
  30.   hiramcpy(0xA0U, (void *)&start_inc, (UBYTE)(&end_inc-&start_inc));
  31.   /* Copy 'inc' to RAM at 0xD000 */
  32.   memcpy((void *)0xD000, (void *)&start_inc, (UWORD)(&end_inc-&start_inc));
  33.  
  34.   print_counter();
  35.  
  36.   /* Call function in ROM */
  37.   puts("Call ROM");
  38.   inc();
  39.   print_counter();
  40.  
  41.   /* Call function in RAM using link-time address */
  42.   puts("Call RAM direct");
  43.   inc_ram();
  44.   print_counter();
  45.  
  46.   /* Call function in RAM using pointer-to-function variable */
  47.   puts("Call RAM indirect");
  48.   inc_ram_var();
  49.   print_counter();
  50.  
  51.   /* Call function in HIRAM using link-time address */
  52.   puts("Call HIRAM direct");
  53.   inc_hiram();
  54.   print_counter();
  55.  
  56.   /* Call function in HIRAM using pointer-to-function variable */
  57.   puts("Call HIRAM indirect");
  58.   inc_hiram_var();
  59.   print_counter();
  60.  
  61.   puts("The End...");
  62. }
  63.